package com.priox.sigar.jsf;

import com.mm.support.mapper.DTOMapperService;
import com.priox.sigar.application.grupoempresarial.RegistroGrupoEmpresarialApp;
import com.priox.sigar.application.mappers.GrupoEmpresarialMapper;
import com.priox.sigar.client.dto.GrupoEmpresarialDTO;
import com.priox.sigar.client.flt.GrupoEmpresarialFlt;
import com.priox.sigar.domain.model.GrupoEmpresarial;
import com.priox.sigar.jsf.util.FindCrudBeanBase;
import org.primefaces.event.CloseEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;


@ManagedBean
@Scope("session")
@Component
public class MaestroGrupoEmpresarialJsfBean extends FindCrudBeanBase {

    GrupoEmpresarialFlt filtroBusqueda;
    GrupoEmpresarialDTO nuevoRegistro;
    List<GrupoEmpresarialDTO> registros = new ArrayList<GrupoEmpresarialDTO>();

    @Autowired
    DTOMapperService mapperService;

    @Autowired
    GrupoEmpresarialMapper grupoEmpresarialMapper;

    @Autowired
    RegistroGrupoEmpresarialApp registroGrupoEmpresarialApp;


    @PostConstruct
    public void init() {
        filtroBusqueda = new GrupoEmpresarialFlt();
        nuevoRegistro = new GrupoEmpresarialDTO();
        findRegistros();
    }

    /*Métodos de herencia*/

    @Override
    public void setCursorTableNull() {
        //To change body of implemented methods use File | Settings | File Templates.
    }

    @Override
    public void onNewRecord(ActionEvent actionEvent) {
        setUpdateMode(false);
        nuevoRegistro = new GrupoEmpresarialDTO();
    }

    @Override
    public void onFind(ActionEvent actionEvent) {
        findRegistros();
    }

    @Override
    public void onShowEditDialog(ActionEvent actionEvent) {
        setUpdateMode(true);
        setPersistMode(true);

    }

    public void findRegistros() {

        registros = grupoEmpresarialMapper.findByFilter(filtroBusqueda);
        if (registros.size() == 0) {
            addMessage(noRecordFoundMsg, FacesMessage.SEVERITY_INFO);
        }
    }


    @Override
    public void onClean(ActionEvent actionEvent) {
        registros = new ArrayList<GrupoEmpresarialDTO>();
        nuevoRegistro = new GrupoEmpresarialDTO();
        filtroBusqueda = new GrupoEmpresarialFlt();
    }

    @Override
    public void onPersist(ActionEvent actionEvent) {
        GrupoEmpresarial grupoEmpresarial = mapperService.map(nuevoRegistro, GrupoEmpresarial.class);
        registroGrupoEmpresarialApp.save(grupoEmpresarial, updateMode);
        findRegistros();
    }

    @Override
    public void onDelete(ActionEvent actionEvent) {
        GrupoEmpresarial grupoEmpresarial = mapperService.map(nuevoRegistro, GrupoEmpresarial.class);
        registroGrupoEmpresarialApp.delete(grupoEmpresarial);
    }

    @Override
    protected void onDialogClose(CloseEvent event) {
        nuevoRegistro = new GrupoEmpresarialDTO();
    }




    /*Getters and Setters*/

    public GrupoEmpresarialFlt getFiltroBusqueda() {
        return filtroBusqueda;
    }

    public void setFiltroBusqueda(GrupoEmpresarialFlt filtroBusqueda) {
        this.filtroBusqueda = filtroBusqueda;
    }

    public GrupoEmpresarialDTO getNuevoRegistro() {
        return nuevoRegistro;
    }

    public void setNuevoRegistro(GrupoEmpresarialDTO nuevoRegistro) {
        this.nuevoRegistro = nuevoRegistro;
    }

    public List<GrupoEmpresarialDTO> getRegistros() {
        return registros;
    }

    public void setRegistros(List<GrupoEmpresarialDTO> registros) {
        this.registros = registros;
    }
}
